package com.ow.dva.module.city.controller;


import com.ow.dva.module.base.controller.BaseController;
import com.ow.dva.module.base.entity.json.RT;
import com.ow.dva.module.base.entity.param.DvaPage;
import com.ow.dva.module.city.entity.City;
import com.ow.dva.module.city.service.CityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;


/**
 * <p>
 * 地区信息 前端控制器
 * </p>
 *
 * @author YanZengBao
 * @since 2020-02-20
 * @version V1.0
 */
@Controller
@Api(tags = "地区信息 相关控制器")
@RequestMapping("/city")
public class CityController extends BaseController {

    /**
    * 分页获取地区信息数据列表信息
    * 创建时间：2020-02-20 YanZengBao
    * 修改时间：2020-02-20 YanZengBao 加注释
    * 修改时间：
    */
    @ApiOperation(value = "分页获取",notes = "批量获取地区信息信息列表，分页，可携带条件")
    @RequiresPermissions("city:page")
    @GetMapping(value = "/page")
    public String page(DvaPage<City> dvaPage, @RequestParam Map<String, Object> param, Model model){

        DvaPage<City> page = cityService.page(dvaPage,param);
        model.addAttribute("page",page);
        model.addAttribute("param",param);
        return "city/list";
    }

    /**
    * 进入地区信息添加页面。
    * 创建时间：2020-02-20 YanZengBao
    * 修改时间：2020-02-20 YanZengBao 加注释
    * 修改时间：
    */
    @ApiOperation(value = "进入添加页面",notes = "进入地区信息添加页面")
    @RequiresPermissions("city:add")
    @GetMapping(value = "/add")
    public String add(){

        return "city/add";
    }

    /**
    * 添加地区信息信息。
    * 创建时间：2020-02-20 YanZengBao
    * 修改时间：2020-02-20 YanZengBao 加注释
    * 修改时间：
    */
    @ApiOperation(value = "添加",notes = "添加单个地区信息信息")
    @RequiresPermissions("city:add")
    @PostMapping("/save")
    @ResponseBody
    public RT save(City city){

        return cityService.save(city) ? RT.ok() : RT.error(RT.ERROR_0101);
    }

    /**
    * 进入地区信息编辑页面。
    * 创建时间：2020-02-20 YanZengBao
    * 修改时间：2020-02-20 YanZengBao 加注释
    * 修改时间：
    */
    @ApiOperation(value = "进入编辑页面",notes = "进入地区信息编辑页面")
    @RequiresPermissions("city:edit")
    @GetMapping(value = "/edit")
    public String edit(String id, Model model){

        model.addAttribute("data",cityService.getById(id));

        return "city/edit";
    }

    /**
    * 修改地区信息信息。
    * 创建时间：2020-02-20 YanZengBao
    * 修改时间：2020-02-20 YanZengBao 加注释
    * 修改时间：
    */
    @ApiOperation(value = "修改",notes = "修改单个地区信息信息")
    @RequiresPermissions("city:edit")
    @PostMapping("/update")
    @ResponseBody
    public RT update(City city){

        return cityService.updateById(city) ? RT.ok() : RT.error(1);
    }

    /**
    * 删除单个地区信息信息。
    * 创建时间：2020-02-20 YanZengBao
    * 修改时间：2020-02-20 YanZengBao 加注释
    * 修改时间：
    */
    @ApiOperation(value = "删除",notes = "删除单个地区信息信息")
    @RequiresPermissions("city:delete")
    @PostMapping("/delete")
    @ResponseBody
    public RT delete(@ApiParam(name="要删除的地区信息ID") String id){

        return cityService.removeById(id) ? RT.ok() : RT.error(1);
    }

    /**
    * 批量删除多个地区信息信息。
    * 创建时间：2020-02-20 YanZengBao
    * 修改时间：2020-02-20 YanZengBao 加注释
    * 修改时间：
    */
    @ApiOperation(value = "批量删除",notes = "批量删除多个地区信息信息")
    @RequiresPermissions("city:delete")
    @PostMapping("/deleteByIds")
    @ResponseBody
    public RT deleteByIds(@ApiParam(name="要删除的地区信息ID List") @RequestParam List<String> ids){

        return cityService.removeByIds(ids) ? RT.ok() : RT.error(1);
    }


    /**
     * 描述：根据城市ID查询下级城市
     * 创建时间： 2020/2/20 YanZengBao
     * 修改时间： 2020/2/20 YanZengBao  加注释
     * 修改时间：
     */
    @ApiOperation(value = "根据地区id查询下级地区",notes = "查询多个地区信息信息")
    @PostMapping("/findChildByCityId")
    @ResponseBody
    public RT findChildByCityId(String cityId){

        List<City> list = cityService.findChildByCityId(cityId);
        return list.size() > 0 ? RT.ok(list) : RT.error(RT.ERROR_0101,"暂无数据");
    }

    /**
     * 描述：根据父级ID查询下级城市列表
     * 创建时间： 2020/2/20 YanZengBao
     * 修改时间： 2020/2/20 YanZengBao  加注释
     * 修改时间：
     */
    @ApiOperation(value = "根据父级ID查询下级城市列表",notes = "查询多个地区信息信息")
    @PostMapping("/findCityByParentId")
    @ResponseBody
    public RT findCityByParentId(String parentId){

        List<City> list = cityService.findCityByParentId(parentId);
        return list.size() > 0 ? RT.ok(list) : RT.error(RT.ERROR_0101,"暂无数据");
    }


    /**
     * 描述：根据父级ID查询下级区/县列表
     * 创建时间： 2020/2/20 YanZengBao
     * 修改时间： 2020/2/20 YanZengBao  加注释
     * 修改时间：
     */
    @ApiOperation(value = "根据父级ID查询下级区/县列表",notes = "查询多个地区信息信息")
    @PostMapping("/findCountyByParentId")
    @ResponseBody
    public RT findCountyByParentId(String parentId){

        List<City> list = cityService.findCountyByParentId(parentId);
        return list.size() > 0 ? RT.ok(list) : RT.error(RT.ERROR_0101,"暂无数据");
    }


    @Resource
    CityService cityService;
}
